<?php

namespace JsonLowCode\UI;

use JsonLowCode\Schema;
use JsonLowCode\Traits\Events\HasOnUpdateValue;
use JsonLowCode\Traits\Props\HasDefaultValue;
use JsonLowCode\Traits\Props\HasDisabled;
use JsonLowCode\Traits\Props\HasKeyboard;
use JsonLowCode\Traits\Props\HasModel;
use JsonLowCode\Traits\Props\HasPlacements;
use JsonLowCode\Traits\Props\HasTooltip;
use JsonLowCode\Traits\Props\HasValue;
use JsonLowCode\Traits\Props\HasVertical;

/**
 * Slider滑动组件
 * @method static Slider make() Slider滑动组件
 */
class Slider extends Schema
{
    protected string $componentName = "NSlider";

    use HasDefaultValue, HasDisabled, HasKeyboard, HasValue, HasModel, HasPlacements;
    use HasTooltip, HasVertical;
    use HasOnUpdateValue;

    /**
     * 最小值
     * @param string|int|float $min
     * @return $this
     */
    public function min(string|int|float $min = 0): static
    {
        return $this->prop("min",$min);
    }

    /**
     * 最大值
     * @param string|int|float $max
     * @return $this
     */
    public function max(string|int|float $max = 100): static
    {
        return $this->prop("max",$max);
    }


    /**
     * 步长
     * @param string|int|float $step number | 'mark'
     * @return $this
     */
    public function step(string|int|float $step = 1): static
    {
        return $this->prop("step",$step);
    }

    /**
     * 是否倒转轨道
     * @param bool|string $bool
     * @return $this
     */
    public function reverse(bool|string $bool = true): static
    {
        return $this->prop('reverse', $bool);
    }

    /**
     * 是否选择范围值
     * @param bool|string $bool
     * @return $this
     */
    public function range(bool|string $bool = true): static
    {
        return $this->prop('range', $bool);
    }

    /**
     * 是否一直显示 tooltip，仅对非 range 生效
     * @param bool|string $bool
     * @return $this
     */
    public function showTooltip(bool|string $bool = true): static
    {
        return $this->prop('showTooltip', $bool);
    }

    /**
     * 格式化 tooltip
     * @param string $value (value: number) => string | number
     * @return $this
     */
    public function formatTooltip(string $value): static
    {
        return $this->events('format-tooltip', $value);
    }

    /**
     * Slider 上的标记
     * @param string|array $value { [markValue: number]: string }
     * @return $this
     */
    public function marks(string|array $value): static
    {
        return $this->prop('marks', $value);
    }

    /**
     * 滑块按钮
     * @param string|array $value { [markValue: number]: string }
     * @return $this
     */
    public function slotThumb(string|array $value): static
    {
        return $this->slot('thumb', $value);
    }

}
